home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / kbstf10.zip / SEEKBBUF.C < prev    next >
Text File  |  1996-01-31  |  3KB  |  100 lines

  1. #define NULL 0
  2. #if __STDC__
  3. #define _Cdecl
  4. #else
  5. #define _Cdecl cdecl
  6. #endif
  7.  
  8. void _Cdecl __int__(int interruptnum);
  9. /* extern unsigned _Cdecl _psp; */
  10. /* #include <stdlib.h> */
  11.  
  12. #define putchar(c) (_DL=c,_AH=02,__int__(0x21))
  13.  
  14. #define putbackslash() (_DL='\\',_AH=02,__int__(0x21))
  15.  
  16.   char *HexDig="0123456789ABCDEF";
  17.  
  18. void puthexbyte(unsigned char ch)
  19. {
  20.    putchar(HexDig[ch>>4]);
  21.    putchar(HexDig[ch&0xF]);
  22. }
  23.  
  24. void puthexword(unsigned int w)
  25. {
  26.    puthexbyte( ((unsigned char *) &w)[1] );
  27.    puthexbyte( *((unsigned char *) &w) );
  28. }
  29.  
  30. void newline(void)
  31. { putchar('\r'); putchar('\n'); }
  32.  
  33.  
  34. #define MK_FP(seg,ofs)  ((void far *) \
  35.                            (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
  36.  
  37. #define SET_FP_OFF(fp,ofs)  ((void far *) \
  38.                       ((((unsigned long)(fp))&0xFFFF0000)|(unsigned)(ofs)))
  39.  
  40. #define FAR_BYTE(fp) (*((unsigned char far *) (fp)))
  41. #define FAR_WORD(fp) (*((unsigned int far *) (fp)))
  42. #define FAR_ULONG(fp) (*((unsigned long far *) (fp)))
  43.  
  44.  
  45.  
  46. #define _toupper(c)    ((c)&0xDF)
  47.  
  48.  
  49.   unsigned int far *kbdhead  = MK_FP(0x40,0x1A);
  50.   unsigned int far *kbdtail  = MK_FP(0x40,0x1C);
  51.   unsigned int far *kbdbufstart = MK_FP(0x40,0x80);
  52.   unsigned int far *kbdbufend = MK_FP(0x40,0x82);
  53.   /*  int far *kbdbuffer = MK_FP(0x40,*kbdbufstart);  */
  54.   /*  int far *kbdbuffer = MK_FP(0x40,0x1E);  */
  55.   /*  int far *BufTailPtr = (int far *) 0x400000|((long)*kbdtail);  */
  56.  
  57.   unsigned int far *p = MK_FP(0x40,0);
  58.   char stop=0;
  59.   unsigned int u;
  60.  
  61. void OutBuffer(void)
  62. {
  63.          for (u=*kbdbufstart;u<*kbdbufend;u+=2) {
  64.             *((unsigned int *)&p)=u;
  65.             puthexword(*p);
  66.             if((u+2)>=*kbdbufend) {
  67.                if ((*kbdbufend-*kbdbufstart)>(2*16)) {
  68.                   if(u==*kbdhead) putchar('<');
  69.                   newline(); putchar('\n');
  70.                } else putchar('\r');
  71.  
  72.             }
  73.             else if(u==*kbdhead) putchar('<');
  74.             else putchar(' ');
  75.          }
  76. }
  77.  
  78. main(){
  79.    newline(); newline();
  80.    *kbdhead=*kbdbufstart;
  81.    *kbdtail=*kbdbufstart;
  82.    for (u=*kbdbufstart;u<*kbdbufend;u+=2) {
  83.       *((unsigned int *)&p)=u;
  84.       *p=0;
  85.    }
  86.    OutBuffer();
  87.    while (stop==0) {
  88.       if(*kbdhead!=*kbdtail) {
  89.          stop=((FAR_WORD(SET_FP_OFF(p,*kbdhead)))==0x011B);
  90.          if(((*kbdhead)+=2)>=*kbdbufend)*kbdhead=*kbdbufstart;
  91.          OutBuffer();
  92.          /*
  93.          if((*kbdtail+2)==*kbdbufend) {
  94.             *kbdtail=*kbdbufstart;
  95.          }
  96.          */
  97.       }
  98.    }
  99.    newline();
  100. }